import base64, pickle
from django_redis import get_redis_connection

def merge_cart_cookie_to_redis(request, user, response):
    """
    cookie购物车数据 合并到 redis购物车数据
    :param request: 登录时借用来的请求对象
    :param user: 登录时借用来的用户对象
    :param response:登录成功 借用过来准备做删除cookie的响应对象
    :return:
    """

    # 获取cookie
    cart_str = request.COOKIES.get('cart')
    # 判断是否有cookie购物车数据
    if cart_str is None:
        # 如果cookie中没有购物车数据 直接返回
        return
    # cookie购物车中的字符串转换成字典
    cart_dict = pickle.loads(base64.b64decode(cart_str.encode()))
    # 创建redis连接对象
    redis_conn = get_redis_connection('cart')
    pl = redis_conn.pipeline()
    # 遍历cookie购物车大字典 把sku_id及count 向redis的hash中存储
    for sku_id in cart_dict:
        # 如果hash中存在sku_id 用cookie数据覆盖redis数据 不存在就是新增
        pl.hset('cart_%d' % user.id, sku_id, cart_dict[sku_id]['count'])
        # 判断cookie中的商品 是否勾选 如勾选 则 勾选的商品sku_id 存储set集合中
        if cart_dict[sku_id]['selected']:
            pl.sadd('selected_%d' % user.id, sku_id)

    pl.execute() # 执行redis管道

    # 删除cookie购物车数据
    response.delete_cookie('cart')



